﻿Public Class RegistroMarcas
    Public horas As String
    Public Sub InsertarMinutosPorEmpleado(ByVal idEmpleado As String)
        Try
            Dim cuantosMarcasHay As Integer = Me.RegistromarcasTableAdapter.ScalarQueryCuentaMarcasPorEmpleado(idEmpleado, Date.Today)
            If cuantosMarcasHay = 2 Then
                Dim HoraInicio As TimeSpan = Me.RegistromarcasTableAdapter.GetDataByHoraInicio(idEmpleado, Date.Today).Item(0).horamarca
                Dim HoraFinal As TimeSpan = Me.RegistromarcasTableAdapter.GetDataByHoraFinal(idEmpleado, Date.Today).Item(0).horamarca
                Dim MinutosTrabajados As TimeSpan = HoraFinal - HoraInicio
                Dim MinutosBrutos As Decimal = MinutosTrabajados.TotalMinutes
                Dim IdHorarioEmpleado As Integer = EmpleadosTableAdapter.GetDataByObtenerEmpleadoPorIdEmpleado(idEmpleado).Item(0).idhorario
                Dim SueldoBaseEmpleado As Decimal = EmpleadosTableAdapter.GetDataByObtenerEmpleadoPorIdEmpleado(idEmpleado).Item(0).sueldobase
                Dim SueldoPorMinuto As Decimal = (((SueldoBaseEmpleado / 30) / 8) / 60)
                Dim Dia As Integer = Date.Today.DayOfWeek
                Dim diaLetras As String
                Dim HorarioHoraEntrada As TimeSpan 'Obtiene la hora de entrada establecida sugun el horario asignado
                Dim HorarioHoraSalida As TimeSpan 'Obtiene la hora de salida establecida sugun el horario asignado
                Dim HorarioDesfase As TimeSpan
                Select Case Dia
                    Case 1
                        HorarioDesfase = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).ldesfase
                        HorarioHoraEntrada = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).lhi
                        HorarioHoraSalida = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).lhf
                        diaLetras = "Lunes"
                    Case 2
                        HorarioDesfase = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).mdesfase
                        HorarioHoraEntrada = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).mhi
                        HorarioHoraSalida = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).mhf
                        diaLetras = "Martes"
                    Case 3
                        HorarioDesfase = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).midesfase
                        HorarioHoraEntrada = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).mihi
                        HorarioHoraSalida = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).mihf
                        diaLetras = "Miércoles"
                    Case 4
                        HorarioDesfase = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).jdesfase
                        HorarioHoraEntrada = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).jhi
                        HorarioHoraSalida = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).jhf
                        diaLetras = "Jueves"
                    Case 5
                        HorarioDesfase = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).vdesfase
                        HorarioHoraEntrada = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).vhi
                        HorarioHoraSalida = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).vhf
                        diaLetras = "Viernes"
                    Case 6
                        HorarioDesfase = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).sdesfase
                        HorarioHoraEntrada = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).shi
                        HorarioHoraSalida = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).shf
                        diaLetras = "Sábado"
                    Case Else
                        HorarioDesfase = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).dodesfase
                        HorarioHoraEntrada = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).dohi
                        HorarioHoraSalida = HorariosTableAdapter1.GetDataByObtenerHorarioPorIdHorario(IdHorarioEmpleado).Item(0).dohf
                        diaLetras = "Domingo"
                End Select

                If HoraInicio > HorarioHoraSalida Or HoraFinal < HorarioHoraEntrada Then
                    Return
                End If


                Dim HoraACalcularInicio As TimeSpan
                Dim HoraACalcularFinal As TimeSpan

                If HoraInicio <= HorarioHoraEntrada Then
                    HoraACalcularInicio = HorarioHoraEntrada 'Si marcó antes de la hora ignoramos ese tiempo y asumimos que´su hora de entrada es la estipulada por el horario
                Else
                    HoraACalcularInicio = HoraInicio
                End If

                If HoraFinal >= HorarioHoraSalida Then
                    HoraACalcularFinal = HorarioHoraSalida 'Si marcó despues de la hora ignoramos ese tiempo y asumimos que su hora de salida es la estipulada por el horario, esto porque no se pagan horas extras desde aqui
                Else
                    HoraACalcularFinal = HoraFinal
                End If
                Dim HorasTrabajadas As TimeSpan = (HoraACalcularFinal - HoraACalcularInicio) - HorarioDesfase
                Dim HorasTrabajadasDecimal As Decimal = HorasTrabajadas.TotalHours
                Dim MinutosTrabajadosNetos As Decimal = HorasTrabajadas.TotalMinutes
                Dim TotalPagoDia As Decimal = MinutosTrabajadosNetos * SueldoPorMinuto
                Dim correlativo As Integer = PagosminutosmarcaTableAdapter1.ScalarQueryCorrelativo + 1
                Try
                    PagosminutosmarcaTableAdapter1.InsertQueryPagosMinutos(correlativo, idEmpleado, Date.Today, diaLetras, HorasTrabajadasDecimal, MinutosTrabajadosNetos, SueldoBaseEmpleado, SueldoPorMinuto, TotalPagoDia, HoraInicio.ToString, HoraFinal.ToString)
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
               

            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Public Function ObtenerNombreEmpleadoFuncion(ByVal codigo As String) As String
        'IdempleadoTextEdit.Properties.Source = EmpleadosBindingSource
        IdempleadoTextEdit.Properties.DisplayMember = "nombre"
        IdempleadoTextEdit.Properties.ValueMember = "idempleado"
        IdempleadoTextEdit.EditValue = codigo
         Return String.Format("{0} {1}", IdempleadoTextEdit.GetColumnValue("nombre"), IdempleadoTextEdit.GetColumnValue("apellido"))

    End Function
    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        hora.Text = TimeOfDay.TimeOfDay.ToString
        fecha.Text = Date.Today

        If String.Compare(horas, TimeOfDay.Second.ToString, False) = 0 And String.Compare(codigo.Text, "", False) <> 0 Then
            codigo.Text = ""
            AlertControl1.AppearanceCaption.ForeColor = Color.Red
            AlertControl1.Show(Me, "Error", "No se encontró el código")

            ' errorcodigo.Visible = True
            'marcaaceptada.Visible = False
            'nombreuser.Visible = False
            ' horas = TimeOfDay.Second.ToString + 3
        End If



        ' If errorcodigo.Visible = True And String.Compare(horas, TimeOfDay.Second.ToString, False) = 0 Then
        ' errorcodigo.Visible = False
        ' End If

        If nombreuser.Visible = True And String.Compare(horas, TimeOfDay.Second.ToString, False) = 0 Then

            ' marcaaceptada.Visible = False
            nombreuser.Visible = False
            PictureEdit1.Visible = False
        End If






    End Sub

    Private Sub RegistroMarcas_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'DbFireAndIceDataSet.empleados' table. You can move, or remove it, as needed.
        Me.EmpleadosTableAdapter.Fill(Me.DbFireAndIceDataSet.empleados)
        'TODO: This line of code loads data into the 'DbFireAndIceDataSet.registromarcas' table. You can move, or remove it, as needed.
        Me.RegistromarcasTableAdapter.Fill(Me.DbFireAndIceDataSet.registromarcas)
        hora.Text = TimeOfDay.TimeOfDay.ToString
        fecha.Text = Date.Today
        codigo.Focus()

    End Sub

    Private Sub codigo_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles codigo.KeyPress
        'If e.KeyChar = ChrW(Keys.Home) Then
        '    MsgBox("Presiono tab")

        'End If

        'If InStr(1, "0123456789abcdefghijklmnñopqrstuvwxyz" & Chr(8), e.KeyChar) = 0 Then
        '    e.KeyChar = ""
        'End If
    End Sub

    Private Sub codigo_TextChanged(sender As System.Object, e As System.EventArgs) Handles codigo.TextChanged
        ''Condiciones a considerar al momento de marcar
        '1. El empleado debe existir
        '2. No debe de permitirle marcar mas de dos veces



        Dim varSaberSiExisteEmpleado As Integer
        Dim varSaberCuantosRegistrosHayEnLaTablaDeMarcaje As Integer
        Dim varSaberCuantasVecesMarcoUnEmpleadoEnElDia As Integer

        Try ''Capturar los errores que se generen al solicitar algun servicio
            varSaberSiExisteEmpleado = Me.EmpleadosTableAdapter.ScalarQuerySaberSiExisteEmpleado(codigo.Text)
            varSaberCuantosRegistrosHayEnLaTablaDeMarcaje = Me.RegistromarcasTableAdapter.ScalarQueryCuantosHay
            varSaberCuantasVecesMarcoUnEmpleadoEnElDia = Me.RegistromarcasTableAdapter.ScalarQuerySaberCuantasVecesMarcoAlDia(codigo.Text, Date.Today)
        Catch ex As Exception
            AlertControl1.AppearanceCaption.ForeColor = Color.Red
            AlertControl1.Show(Me, "Error", "Oops, no se pudo completar la transacción. Favor intente mas tarde")
        End Try



        If varSaberSiExisteEmpleado <> 0 Then ''Condicion para verificar si existe el empleado

            If varSaberCuantasVecesMarcoUnEmpleadoEnElDia < 2 Then ''Condiciona que un empleado solo pueda marcar dos veces al dia
                RegistromarcasTableAdapter.InsertQuery(varSaberCuantosRegistrosHayEnLaTablaDeMarcaje + 1, Date.Today, codigo.Text, TimeOfDay.TimeOfDay.ToString)

                Me.RegistromarcasTableAdapter.Fill(Me.DbFireAndIceDataSet.registromarcas) ''Actualiza el Grid Control
                'marcaaceptada.Visible = True
                AlertControl1.AppearanceCaption.ForeColor = Color.Green
                nombreuser.Text = ObtenerNombreEmpleadoFuncion(codigo.Text)
                AlertControl1.Show(Me, "Marca aceptada", "Se registro la marca para el empleado " + ObtenerNombreEmpleadoFuncion(codigo.Text))
                nombreuser.Visible = True
                PictureEdit1.Visible = True
                ' errorcodigo.Visible = False
                InsertarMinutosPorEmpleado(codigo.Text)
                codigo.Text = ""


            Else
                AlertControl1.AppearanceCaption.ForeColor = Color.Red
                AlertControl1.Show(Me, "Error", "Ya registró el límite de marcas (2) en el día")
            End If




        End If


        If codigo.Text <> "" Then
            horas = TimeOfDay.Second.ToString + 3
        End If

    End Sub


    Private Sub RegistromarcasBindingNavigatorSaveItem_Click(sender As System.Object, e As System.EventArgs) Handles RegistromarcasBindingNavigatorSaveItem.Click
        Me.Validate()
        Me.RegistromarcasBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.DbFireAndIceDataSet)

    End Sub
    Private Sub SimpleButton1_Click_1(sender As System.Object, e As System.EventArgs)
        InsertarMinutosPorEmpleado("0801199002655")
    End Sub
End Class